package com.mall.pay.server.config;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 生成訂單號
 */
public class OrderIdGenerator {

    // 时间格式：yyyyMMddHHmmss（14位，精确到秒）
    private static final DateTimeFormatter TIMESTAMP_FORMATTER =
            DateTimeFormatter.ofPattern("yyyyMMddHHmmss");

    // 原子计数器（同一秒内从0开始递增）
    private static final AtomicInteger counter = new AtomicInteger(0);
    private static volatile String lastTimestamp = "";

    // 生成订单号
    public static synchronized String generateOrderId() {
        // 1. 获取当前时间戳（精确到秒）
        String currentTimestamp = LocalDateTime.now().format(TIMESTAMP_FORMATTER);

        // 2. 如果时间戳变化，重置计数器
        if (!currentTimestamp.equals(lastTimestamp)) {
            counter.set(0);
            lastTimestamp = currentTimestamp;
        }

        // 3. 生成序列号（4位，范围：0000-9999）
        int seq = counter.getAndIncrement() % 10000;
        String sequencePart = String.format("%04d", seq);

        // 4. 组合时间戳和序列号
        return currentTimestamp + sequencePart;
    }

}
